A Service Level Agreement (SLA) captures the formal agreement between a service provider and one of its customers relating to service behavior guarantees, escalation procedures, and penalties in case the guarantees are violated. When SLA requirements are agreed upon, a service administrator usually designs the service and then stages it. In many cases, the staging process is iterative in nature and involves several manual interventions. Once the service is observed to behave satisfactorily during staging, it is put in production.
Enterprise applications are typically comprised of a large number of components, which interact with one another in a complex manner. Since each component potentially affects the overall behavior of the system, any high level service level objectives (SLOs) which may be related to performance, availability, security, etc., specified for the service potentially relates to many or all the components. One of the key tasks during the design stage of an enterprise system is determining the amount or capacity of computer resources to be provisioned for the enterprise system such that the SLOs specified in the SLA are satisfied.
System administrators and experts normally apply their domain knowledge to determine the amount of resources to provision for an enterprise system to satisfy high-level goals, such as the SLOs. However, in many instances, resources are over-provisioned resulting in under-utilized resources. Also, the task of determining the amount of resources is iterative, time-consuming and complex.